上一篇講解過了 attribute
的用法,這次再講講預設值的設定
只要在 attribute
的傳入參數加上 option default: (value)
,就可以指定預設值啦~
For example:
class MyClass
include ActiveModel::Model
include ActiveModel::Attributes
# 不再贅述 :P
attribute :title, :string, default: '預設值'
# 如果建立物件時沒有傳入 key `title`,則會套用 "預設值"
attribute :number, :integer
# 沿用上一篇的設定,不套用預設值看看會怎樣
end
現在我們來 new 一個新的 form object,看看預設值是否會出來
obj = MyClass.new({})# 什麼都不傳入,看看他會長什麼樣子
obj.title
=> "預設值" # 真的有預設的字串
obj.number
=> nil # 沒指定預設值則是 nil
那如果,我們傳入一包 params 呢?
params = { title: 'This is Sparta!', number: '123'} # params 假設都是字串
obj = MyClass.new params
obj.title
=> "This is Sparta!" # 有傳就有
obj.number
=> 123 # 而且也會自動轉型,穩定發揮
要注意的是,如果傳入的 params 有該 key 而且值是 nil
,是不會套用預設值的唷!
params = { title: nil , number: '3344'} # params 帶上 title 為 nil
obj = MyClass.new params
obj.title
=> nil # 此時不會套用預設值
obj.number
=> 3344
那既然相比較於 attr_accessor
多出了這麼多的功能,那有沒有其他使用上應該要注意的事情呢?
有的,下一篇會再介紹 attribute
與 attr_accessor
不同之處,以及使用上該注意的一些事情。